LINQ fluent style
Home

LINQ fluent style

LINQ fluent style

Er zijn twee stijlen voor het schrijven van LINQ queries: de vloeiende stijl (of vloeiende syntax) en de query-expressie stijl (of query syntaxis). De vloeiende stijl gebruikt query-operator extensie methoden om queries te maken, terwijl de query-expressie stijl gebruikt maakt van een andere syntaxis die door de compiler vertaald wordt in een vloeiende syntaxis.

De codevoorbeelden tot nu toe maken allemaal gebruik van de vloeiende syntax.

De vloeiend syntax maakt gebruik van de query-operator extensiemethoden zoals omschreven in de statische System.Linq.Enumerable klasse (of System.Linq.Queryable voor geïnterpreteerde of System.Linq.ParallelEnumerable voor PLINQ queries). Deze extensiemethoden voegen extra methoden toe aan de instanties van IEnumerable<TSource>. Dit betekent dat elke instantie van een klasse die deze interface implementeert de LINQ extensiemethoden kunnen gebruiken.

Query operators kunnen apart worden toegepast of aaneengeschakeld om complexere queries te maken.

Aaneengeschakelde queryoperatoren

Als de volgende klasse is gedefinieerd:

Personen[] personen =
{
    new Personen { Name = "Jan", Leeftijd = 60 },
    new Personen { Name = "An", Leeftijd = 100 },
    new Personen { Name = "Peter", Leeftijd = 15 },
    new Personen { Name = "Marijke", Leeftijd = 40 },
    new Personen { Name = "Judith", Leeftijd = 20 }
};

selecteren we de personen ouder dan 50, ordenen we de namen alfabetisch en selecteren alleen de naam van de persoon:

IEnumerable<string> vijftigPlussers = personen.
    Where(x => x.Leeftijd >= 50).
    OrderBy(x => x.Name).
    Select(x => x.Name);
Console.WriteLine("Vijftigplussers:");
foreach (string name in vijftigPlussers)
{
    Console.WriteLine(name);
}

Om dat resultaat te bekomen schakelen we drie query operatoren aaneen: Where, OrderBy en Select.

Merk op dat het oorspronkelijke invoersequentie (weergegeven door de variabele personen) een IEnumerable <Personen> is, terwijl de uitvoersequentie, weergegeven door de variabele vijftigPlussers, van een ander gegevenstype is, namelijk een IEnumerable <string>.

JI
2018-01-20 15:34:44